//package com.sora.security;
//
//import com.sora.enums.ResultCode;
//import com.sora.model.vo.ResultVO;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.PrintWriter;
//import java.util.concurrent.TimeUnit;
//
//@Component
//public class TokenManager {
//
//    @Resource
//    RedisTemplate<String, Object> redisTemplate;
//
//    @Resource
//    JwtManager jwtManager;
//
//    /*
//    * 每个人一个列表，
//    * 一个列表内存一个长token和短token，将列表的过期时长设置为长token过期时间
//    * 如果长token过期了查看redis中的token是否过期，如果没有过期则免费再签发一个长token
//    * 短token过期后查看长token是否过期，如果长token未过期则免费签发一个
//    * */
//
//    public Boolean init(String username) {
//        String shortToken = jwtManager.generateShort(username);
//        String longToken = jwtManager.generateLong(username);
//        redisTemplate.opsForList().leftPush(username, shortToken);
//        redisTemplate.opsForList().leftPush(username, longToken);
////        redisTemplate.opsForSet().add(username, shortToken);
////        redisTemplate.opsForSet().add(username, longToken);
//        redisTemplate.expire(username, jwtManager.getLongExpiration().toMillis()*1000, TimeUnit.SECONDS);
//        return true;
//    }
//
//    public Boolean destory(String username) {
//        redisTemplate.delete(username);
//        return true;
//    }
//
//    public Boolean isTimeOut(String username, String shortToken) {
////        if (redisTemplate.opsForSet().isMember(username, shortToken)) {
////            return true;
////        }
//        if (redisTemplate.opsForList().size(username) == 1) {
//            return true;
//        }
//        return false;
//    }
//
//    public Boolean updateToken(String username, HttpServletResponse response) throws IOException {
//        String shortToken = jwtManager.generateShort(username);
////        redisTemplate.opsForSet().remove(username, shortToken);
//        redisTemplate.opsForList().rightPop(username);
////        redisTemplate.opsForList().rightPush(username, )
//        response.setContentType("application/json;charset=utf-8");
//        PrintWriter writer = response.getWriter();
//        ResultVO<Object> resultVO = new ResultVO<>(ResultCode.UNAUTHORIZED);
//        writer.write(resultVO.toString());
//        writer.flush();
//        writer.close();
//        return true;
//    }
//
//    public Boolean isExist(String username) {
//        if (redisTemplate.hasKey(username)) {
//            return true;
//        }
//        return false;
//    }
//
//
//}
